#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>

/**************应用层ioctrl的使用让led灯闪烁**************/
/*宏定义*/
#define CMD_TEST0 _IO('L',0)    //无数据传递
#define CMD_TEST1 _IO('L',1)
// #define CMD_TEST1 _IO('A',0)
#define CMD_TEST2 _IOW('L',2,int) //可以传递数据
#define CMD_TEST3 _IOW('L',3,int) //可以传递数据
#define CMD_TEST4 _IOR('L',4,int) //读取数据
/*实现打开蜂鸣器的上层应用功能*/
int main(int argc,char*argv[])
{
    int fd;
    int value;
    int ubuf2[64]={0};
    fd=open("/dev/hello_misc",O_RDWR);
    if(fd<0)
    {
        perror("open error\n");
        return fd;
    }
/*使用ioctrl函数实现应用与内核的通讯*/
    while()
    {
        // ioctl(fd,CMD_TEST0);//该函数实现的机制与open等触发file_ops的机制一样会在驱动中有个ioctrl的函数
        // sleep(2);
        // ioctl(fd,CMD_TEST1);//该函数不能够传递数据包括0和1只能是个标志为
        // sleep(2);
        ioctl(fd,CMD_TEST4,&value);//该函数实现的机制与open等触发file_ops的机制一样会在驱动中有个ioctrl的函数
        printf("value is :%d\n",value);
        sleep(2);
        ioctl(fd,CMD_TEST3,1);//该函数不能够传递数据包括0和1只能是个标志为
        sleep(2);
    }

/*将sh中的参数传入函数并传递到内核*/
    // ubuf2[0]=ati(argv[1]);//atoi目的是将数字转换成为字符，argv是main函数传入的参数
    // write(fd,ubuf2,sizeof(ubuf2));
/*测试read函数*/
    // /*测试read函数*/
    //  int ubuf1[64]={0};
    // read(fd,ubuf1,sizeof(ubuf1));
    // printf("ubuf is %s\n",ubuf1);
    // /*------------*/
/*测试write*/
    // /*测试write*/
    // int ubuf2[64]="12345";
    // write(fd,ubuf2,sizeof(ubuf2));
    // /*------------*/

    close(fd);//与release对应 
    return 0;
}